The natural evolution of interactive, mobile appliances with multimedia capabilities brings them towards the integration of applications traditionally developed for the desktop environment (e.g. electronic mail, word processor, web browser) with applications characterized by very different requirements in terms of real-time capabilities (e.g. audio and video coding and decoding for television and/or mobile video telephony) and security (e.g. e-commerce).
To deploy and support desktop applications, the most appealing approach is to adopt a general-purpose operating system, in order to leverage the large amount of code already available for those operating systems, the good availability of software development tools for them, and the widespread expertise programmers have in using them.
On the other hand, general-purpose operating systems often are not suitable for the implementation of the second class of applications mentioned above, especially when the power of the CPU (Central Processing Unit) is in scarce supply as a consequence of cost and/or power consumption constraints. For example, to support real-time applications, the natural choice is a special-purpose real-time operating system, either custom-made or commercially acquired.
Therefore, it would be useful to execute more than one operating system on the same physical machine, and run each application on the operating system most suitable for it; unfortunately, the traditional approach to the design and implementation of operating systems relies on the concept that the operating system has full control on the hardware it runs on, so sharing the same hardware among multiple, traditional operating system is impossible by definition.
In FIG. 1 a simple schematic of the layers of a classical architecture of a virtual machine is shown.
A physical machine 10, like for instance a processor, is associated to a software layer called virtual machine monitor 11, which takes complete control of the machine hardware and creates virtual machines 13. Each of such virtual machines 13 behaves like a complete physical machine, that can run an own operating system 14 and own applications 15 through such an operating system 14.
Historically, virtual machine systems had the goal of simplifying the implementation of the operating system itself and did not provide any real-time guarantee. The hardware was taken as-is and the Virtual Machine Monitor (VMM) had to work around its limitations.
This can be readily observed by reading manuals of systems like e.g. VMware Inc, “VMware GSX Server User's Manual” and R. A. Meyer and L. H. Seawright, “A Virtual Machine Time-Sharing System”, IBM Systems Journal, Vol. 9, No. 3, pp. 199-218, 1970. The VMware software, for example, although providing the ability to run multiple operating system, each in its own virtual machine on a single physical computer, suffers the drawbacks of a not perfect virtualization since input/output device drivers have to be rewritten and input/output operations are performed by a dedicated application server supported by one of the guest operating systems. Further VMware is not developed in a coordinated matter with respect to the hardware and no attention is paid to the real-time characteristics of the virtual machines. Since the publication T. Garfinkel, B. Plaff, J. Chow, M. Rosenblum, D. Boneh, “Terra: A Virtual Machine-Based Platform for Trusted Computing”, Proc. 19th ACM Symp. Operating Sys. Principles, October 2003, describes a system based on the VMware virtualization engine, it suffers from the same shortcomings already described for VMware.
More recent attempts to integrate real-time tasks and a general-purpose operating system are depicted for instance in M. Barabanov, and V. Yodaiken, “Real-time Linux”, Linux Journal, February 1997, where it is described an architecture that provides for nesting a custom real-time microkernel under a general-purpose operating system kernel. The latter requires modifications, so one should ideally have access to its source code; moreover, it is not possible to run a commercially available real-time operating system.
Existing virtual machine systems thus do not provide perfect CPU virtualization, so an off-the-shelf operating system will not run inside a virtual machine unless modified to this purpose; moreover, these systems offer no real-time guarantees and concentrate instead on processor sharing and trusted computing. An example of this can be found for instance in P. Barham, B. Dragovic, K. Fraser, S. Hand, T. Harris, A. Ho, R. Neugerbauer, I. Pratt, A. Warfield, “Xen and the Art of Virtualization”, Proc. 19th ACM Symp. Operating Sys. Principles, October 2003. In such a document it is described an imperfect virtualization of an x86 machine that requires modifications to the operating system in order to run it on the virtual machine. In the publication E. Bugnion, S. Devine, M. Rosenblum “Disco: Running Commodity Operating Systems on Scalable Multiprocessors”, Proc. 16th ACM Symp. Operating Sys. Principles, October 1997 it is depicted a system aimed to run a commodity operating system on scalable multiprocessor machines by implementing a more conventional, virtual architecture over them. Also in this case, the operating system (IRIX) needs to be modified.
U.S. Pat. No. 4,975,836 describes a hardware-oriented implementation of virtual machines for small processors aimed at minimizing the overhead associated with the virtualization process. The system there disclosed provided for multiple instances of the CPU general register bank, one instance for each virtual machine plus one instance for the virtual machine monitor. Also multiple instances of the CPU status register are provided, along with a hardware mechanism to reflect them into the status register obeyed by the hardware. Finally, an interrupt priority/mask mechanism is provided. Such an approach requires extensive modifications to the hardware; hence, it is difficult to integrate into an existing hardware design.
What is desired is a solution capable of overcoming the drawbacks with the prior art solution described above.